آموزش مفهوم Event Handling ( مدیریت رویدادها ) در Spring
در کلیه مراحل آموزشی قبلی Spring ، متوجه شدید که بخش اصلی یک برنامه Spring محتوی ApplicationContext است که چرخه حیات کامل Bean ها در برنامه کنترل می کند .
ApplicationContext ، رویدادهای مشخصی را در هنگام لود و فراخوانی Bean های برنامه اجرا می کند . برای مثال ، رویداد ContextStartedEvent هنگامی مه Context شروع به لود کرده ، اجرا شده و رویداد ContextStopedEvent در هنگام پایان لود شدن Context رخ
می دهد .
مدیریت رویدادها ( Event Handling ) در ApplicationContext را اجرا کند ، هربار که کلاس ApplicationEvent به ApplicationContext ارسال شود ، شی Bean از این عمل مطلع خواهد شد .
Spring شامل رویدادهای استاندارد زیر می باشد که به تشریح هر یک خواهیم پرداخت :
- ContextResfreshed : این رویداد زمانی مه محتوی ApplicatinContext Event مقدار دهی اولیه ( initialized ) یا تازه ( Refresh ) می شود ، رخ می دهد . همچنین این رویداد را می توان با استفاده از متد refresh() رابط کاربری ApplicationContext اجرا نمود .
- ContextStoppedEvent این رویداد زمانی که اجرا ApplicatinContext به استفاده از متد stop() رابط کاربری Configurable متوقف می شود ، رخ میدهد .
پس از متد ، می توانید کارهای مربوط به نگهداری و یهینه سازی سیستم را انجام دهید.
- ContextClosedEvent : این رویداد زمانی رخ می دهد که ApplicationContext با استفاده از متد Closed() رابط کاربری Con بسته می شوید . context ای که بسته شود ، به انتهای چرخه حیات کاری خود خواهد رسید . این Context دیگر نمی تواند لود مجدد ( Refreshed ) یا شروع مجدد ( restart ) شود .
- RequestHandledEvent : این رویداد یک event مختص فضای وب بوده و به کلیه Bean های برنامه اعلام می کند که به یک درخواست HTTP سرویس .
مدیریت رویدادها در Spring ، یک پروسه تک عملیات (single thread ) است . بنابراین زمانی که یک رویدا اجرا می شود ، تا زمانی که کلیه گیرنده های آن رویداد پیام خود را دریافت کرده و به طور کامل اجرا شود ، سایر پروسه های برنامه متوقف شده و روال برنامه stop می شود .
گوش دادن به رویدادهای Context
برای گوش دادن به یک رویداد Context ، هر Bean بایستی رابط کاربری ApplicationListener را که فقط دارای یک متد به نام onApplicationEvent() را اجرا کند .
برای درک بهتر مطالب ارایه شده ، مثال عملی را مطرح می کنیم تا ببینیم رویدادها ( events ) چگونه منتشر شده و شما چگونه می توانید کدهای خود را طوری بنویسید تا اجرای آنها بسته به رخ دادن event ها باشند .
مثال عملی را با طی مراحل زیر در محیط Eclipse طراحی می کنیم :
- یک پروژه جدید به نام SpringExample و یک پکیج جدید را به نام com.tahlildadeh را در پوشه src برنامه ایجاد کنید .
- همانطور که در بخش نوشتن اولین برنامه با Spring آموزش دادیم ، کتابخانه های لازم برنامه را با استفاده از Extered JARs به پروژه اضافه کنید .
- کلاس های HelloWorld ، CStartEvantHandler ، CStopEventHandler و MainApp را در پکیج com.tahlildadeh ایجاد کنید .
- در پوشه src پروژه ، فایل پیکربندی اطلاعات Beans.xml را ایجاد کنید .
- مرحله آخر ایجاد محتوای کلیه فایل های جاوا پروژه و همچنین فایل پیکربندی اطلاعات Beans ها می باشد که در مراحل زیر توضیح داده شده است .
کد زیر را در فایل Hello.World.java قرار دهید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package com.tutorialspoint; public class HelloWorld { private String message; public void setMessage(String message){ this .message = message; } public void getMessage(){ System.out.println( "Your Message : " + message); } } <button></button> |
همچنین محتوای فایل CStartEventHandler.java به صورت زیر است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.tutorialspoint; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStartedEvent; public class CStartEventHandler implements ApplicationListener<contextstartedevent>{ public void onApplicationEvent(ContextStartedEvent event) { System.out.println( "ContextStartedEvent Received" ); } } </contextstartedevent><button></button> |
کد زیر نیز مربوط به فایل CStopEventHandler.java است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.tutorialspoint; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStoppedEvent; public class CStopEventHandler implements ApplicationListener<contextstoppedevent>{ public void onApplicationEvent(ContextStoppedEvent event) { System.out.println( "ContextStoppedEvent Received" ); } } </contextstoppedevent><button></button> |
محتویات فایل اصلی برنامه MainApp.java به این صورت است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package com.tutorialspoint; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext( "Beans.xml" ); // Let us raise a start event. context.start(); HelloWorld obj = (HelloWorld) context.getBean( "helloWorld" ); obj.getMessage(); // Let us raise a stop event. context.stop(); } } <button></button> |
در نهایت نیز ، کد فایل پیکربندی اطلاعات برنامه Bean.xml به صورت زیر تعریف می شود :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | xml version= "1.0" encoding= "UTF-8" ?> xsi:schemaLocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.0.xsd"> id= "helloWorld" class = "com.tutorialspoint.HelloWorld" > name= "message" value= "Hello World!" /> id= "cStartEventHandler" class = "com.tutorialspoint.CStartEventHandler" /> id= "cStopEventHandler" class = "com.tutorialspoint.CStopEventHandler" /><button></button> |
پس از اینکه فایل های برنامه را ایجاد کردیم ، می توانیم آن را اجرا کنیم . در صورت درست بودن همه موارد ، خروجی زیر تولید خواهد شد ،
1 2 3 4 5 6 7 | ContextStartedEvent Received Your Message : Hello World! ContextStoppedEvent Received <button></button> |
در آخر هم اگر دوست داشتید ، می توانید رویدادهای دلخواه خود را نوشته و عملکرد آنها را در برنامه تست کنید .
برای نوشتن رویدادهای دلخواه خود ، به درس آموزش نوشتن Custom Events بروید .
Visit W3Schools.com!
1 |